package com.maijinjie.common.upload.bean;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import com.maijinjie.common.util.FileUtil;

/**
 * 用户上传文件bean类
 * @version 1.0
 * @author GhostarX ( 王欣逸 ) 100992995@qq.com &copy;广州迈今捷信息科技有限公司
 */
public class SessionUploadFiles {
	/** 装载用户所有上传文件的容易 */
	HashMap<String, HashMap<String, List<FileVo>>> allUploadFiles;
	/**
	 * 构造方法
	 */
	public SessionUploadFiles(){
		allUploadFiles = new HashMap<String, HashMap<String, List<FileVo>>>();
	}
	/**
	 * 获取上传文件集合
	 * @return HashMap<String, HashMap<String, List<FileVo>>> 上传文件集合
	 */
	public HashMap<String, HashMap<String, List<FileVo>>> getAllUploadFiles(){
		return this.allUploadFiles;
	}
	
	/**
	 * 获取指定URL对应的上传文件集合
	 * @param url URL
	 * @return HashMap<String, List<FileVo>> 上传文件集合
	 */
	public HashMap<String, List<FileVo>> getUploadFilesByURL(String url){
		return allUploadFiles.get(url);
	}
	/**
	 * 设置URL对应的上传文件集合
	 * @param url URL
	 * @param hm 上传文件集合
	 */
	public void setUploadFilesByURL(String url, HashMap<String, List<FileVo>> hm){
		allUploadFiles.put(url, hm);
	}
	
	/**
	 * 获取指定URL指定名字的上传文件集合
	 * @param url URL
	 * @param name 名字
	 * @return List<FileVo> 上传文件集合
	 */
	public List<FileVo> getUploadFiles(String url, String name){
		return null==getUploadFilesByURL(url)?null:getUploadFilesByURL(url).get(null==name?"DEFAULT":name);
	}
	/**
	 * 获取指定URL默认的上传文件集合
	 * @param url URL
	 * @return List<FileVo> 上传文件集合
	 */
	public List<FileVo> getUploadFiles(String url){
		return null==getUploadFilesByURL(url)?null:getUploadFilesByURL(url).get("DEFAULT");
	}
	/**
	 * 设置指定URL的上传文件集合
	 * @param url URL
	 * @param list 上传文件集合
	 */
	public void setUploadFiles(String url, List<FileVo> list){
		HashMap<String, List<FileVo>> hm = getUploadFilesByURL(url);
		if(null!=hm && !hm.isEmpty()){
			hm = new HashMap<String, List<FileVo>>(); 
		}
		hm.put("DEFAULT", list);
		setUploadFilesByURL(url, hm);
	}
	/**
	 * 设置指定URL和name的上传文件集合
	 * @param url URL
	 * @param name 名字
	 * @param list 上传文件集合
	 */
	public void setUploadFiles(String url, String name, List<FileVo> list){
		HashMap<String, List<FileVo>> hm = getUploadFilesByURL(url);
		if(null!=hm && !hm.isEmpty()){
			hm = new HashMap<String, List<FileVo>>(); 
		}
		hm.put(null==name?"DEFAULT":name, list);
		this.allUploadFiles.put(url, hm);
	}
	/**
	 * 移除指定的URL和NAME和文件路径的文件内容（不删除文件）
	 * @param url URL
	 * @param name 名字
	 * @param imgPath 文件路径
	 */
	public void removeFile(String url, String name, String imgPath){
		Iterator<FileVo> iterator = getUploadFiles(url, name).iterator();
		FileVo f = null;
		while(iterator.hasNext()){
			f = iterator.next();
			if(imgPath.equals(f.getUrl())){
				iterator.remove();
			}
		}
	}
	/**
	 * 移除指定的URL和NAME和文件路径的文件内容（不删除文件）
	 * @param url URL
	 * @param imgPath 文件路径
	 */
	public void removeFile(String url, String imgPath){
		if(null!=getUploadFiles(url)){
			Iterator<FileVo> iterator = getUploadFiles(url).iterator();
			FileVo f = null;
			while(iterator.hasNext()){
				f = iterator.next();
				if(imgPath.equals(f.getUrl())){
					iterator.remove();
				}
			}
		}
	}
	/**
	 * 删除指定的URL和NAME和文件路径的文件内容及对应的物理文件
	 * @param url URL
	 * @param name 名字
	 * @param imgPath 文件路径
	 * @param basicPath 保存文件的跟目录
	 */
	public void deleteFile(String url, String name, String imgPath, String basicPath){
		Iterator<FileVo> iterator = getUploadFiles(url, name).iterator();
		FileVo f = null;
		while(iterator.hasNext()){
			f = iterator.next();
			if(imgPath.equals(f.getUrl())){
				iterator.remove();
				imgPath = -1!=imgPath.lastIndexOf("/")?imgPath.substring(imgPath.lastIndexOf("/")+1, imgPath.length()):imgPath;
				FileUtil.delFile(basicPath + File.separator + imgPath);
			}
		}
	}
	/**
	 * 删除指定的URL和NAME和文件路径的文件内容及对应的物理文件
	 * @param url URL
	 * @param imgPath 文件路径
	 * @param basicPath 保存文件的根目录
	 */
	public void deleteFile(String url, String imgPath, String basicPath){
		Iterator<FileVo> iterator = getUploadFiles(url).iterator();
		FileVo f = null;
		while(iterator.hasNext()){
			f = iterator.next();
			if(imgPath.equals(f.getUrl())){
				iterator.remove();
				FileUtil.delFile(basicPath + File.separator + imgPath);
			}
		}
	}
	/**
	 * 移除所有的上传文件记录
	 */
	public void removeAll(){
		this.allUploadFiles = new HashMap<String, HashMap<String, List<FileVo>>>();
	}
	/**
	 * 删除所有的上传文件记录 
	 * @param basicPath 项目根目录
	 * @param outUtl 外网路径（如果非空，则属于外网路径，则不删除物理文件）
	 * @param isDeleteFile 是否删除物理文件
	 * @param outUtl 排除的URL
	 */
	public void deleteAll(String basicPath, String outUtl, boolean isDeleteFile){
		Set<String> allSet = null;
		Set<String> set = null;
		List<FileVo> list = null;
		Iterator<FileVo> iterator = null;
		HashMap<String, List<FileVo>> hm = null;
		FileVo file = null;
		allSet = this.allUploadFiles.keySet();
		if(null!=allSet && !allSet.isEmpty()){
			for(String s : allSet){
				if(null==outUtl || "".equals(outUtl.trim()) || -1==outUtl.indexOf(s)){
					hm = this.allUploadFiles.get(s);
					if(null!=hm && !hm.isEmpty()){
						set = hm.keySet();
						for(String s2 : set){
							list = hm.get(s2);
							if(null!=list && !list.isEmpty()){
								iterator = list.iterator();
								while(iterator.hasNext()){
									file = iterator.next();
									if(null!=file && isDeleteFile){
										FileUtil.delFile(basicPath + File.separator + file.getUrl());
									}
									iterator.remove();
								}
							}
						}
					}
				}
			}
		}
	}
	/**
	 * 向指定的URL和NAME增加文件对象
	 * @param url URL
	 * @param name 名字
	 * @param file 文件对象
	 */
	public void addFile(String url, String name, FileVo file){
		List<FileVo> list = getUploadFiles(url, name);
		if(null==list){
			list = new ArrayList<FileVo>();
		}
		list.add(file);
		setUploadFiles(url, name, list);
	}
	/**
	 * 向指定的URL增加文件对象
	 * @param url URL
	 * @param file 文件对象
	 */
	public void addFile(String url, FileVo file){
		List<FileVo> list = getUploadFiles(url);
		if(null==list){
			list = new ArrayList<FileVo>();
			setUploadFiles(url, list);
		}
		list.add(file);
	}
	
}